package com.ruoyi.utils;

import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.produce.base.bom.domain.Bom;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;

/**
 * 工具类
 *
 * @author Drj 2021/6/28
 * 修改：刘思逸 2021.7.17
 */
public class UtilsList {

    /**
     * 将所有子件全部提取出来，存放到list内
     *
     * @param bom
     * @return
     */
    public static List<Bom> getBomList(Bom bom) {
        List<Bom> bomList = new ArrayList<>();
        bomList.add(bom);
        if (StringUtils.isNotNull(bom.getProduceChild())) {
            for (int i = 0; i < bom.getProduceChild().size(); i++) {
                bomList.addAll(getBomList(bom.getProduceChild().get(i)));
            }
        }
        return bomList;
    }

    /**
     * 左补零
     *
     * @param str
     * @param strLength 长度
     * @return
     */
    public static String addZeroForNumLeft(String str, int strLength) {
        int strLen = str.length();
        if (strLen < strLength) {
            while (strLen < strLength) {
                StringBuffer sb = new StringBuffer();
                sb.append("0").append(str);// 左补0
                // sb.append(str).append("0");//右补0
                str = sb.toString();
                strLen = str.length();
            }
        }

        return str;
    }

    /**
     * 右补零
     *
     * @param str
     * @param strLength 长度
     * @return
     */
    public static String addZeroForNumRight(String str, int strLength) {
        int strLen = str.length();
        if (strLen < strLength) {
            while (strLen < strLength) {
                StringBuffer sb = new StringBuffer();
                //sb.append("0").append(str);// 左补0
                sb.append(str).append("0");//右补0
                str = sb.toString();
                strLen = str.length();
            }
        }

        return str;
    }

    /**
     * 生成新的编号（类型为：6个前缀，8位日期，2位自增数字）
     * 用于生成16位编号（其余需要改写）
     *
     * @param type 前6位
     * @param id   最新ID
     * @return
     */
    public static String getId(String type, String id) {
        String temp = id;//不足8位，补齐8位
        Calendar nowtime = new GregorianCalendar();
        String time = (String.format("%02d", nowtime.get(Calendar.YEAR)) +
                String.format("%02d", nowtime.get(Calendar.MONTH) + 1) +
                String.format("%02d", nowtime.get(Calendar.DATE))) + "001";
        if (StringUtils.isNull(temp)) {
            return time;
        }
        String purchaseOrderIdNew = "";
        if (temp.substring(0, 8).equals(time.substring(0, 8))) {
            //日期相同，则表示同一天的记录
            purchaseOrderIdNew = UtilsAdd.addOne(temp, 1);
        }
        else {
            //当天第一条记录
            purchaseOrderIdNew = time;
        }
        return type + purchaseOrderIdNew;
    }

    /**
     * 用于数据库中没有字段，生成第一条编号(类型为：8为日期+01)
     * @param type
     * 生成最新时间的编号
     */
    public static String getFirstId(String type) {
        Calendar nowTime = new GregorianCalendar();
        String time = (String.format("%02d", nowTime.get(Calendar.YEAR)) +
                String.format("%02d", nowTime.get(Calendar.MONTH) + 1) +
                String.format("%02d", nowTime.get(Calendar.DATE))) + "001";
        return type + time;
    }

    /**
     * 生成新的加工单编号
     * 用于生成11位加工单编号，B+6位日期+4位数字
     *
     * @param type B
     * @param id   最新ID
     * @return
     */
    public static String getWorkSheetId(String type, String id) {
        String temp = id;
        Calendar nowTime = new GregorianCalendar();
        String time = (String.format("%02d", nowTime.get(Calendar.YEAR)) +
                String.format("%02d", nowTime.get(Calendar.MONTH) + 1)) + "0001";
        if (StringUtils.isNull(temp)) {
            return time;
        }
        String purchaseOrderIdNew = "";
        if (temp.substring(0, 6).equals(time.substring(0, 6))) {
            //日期相同，则表示同一月的记录
            purchaseOrderIdNew = UtilsAdd.addOne(temp, 1);
        }
        else {
            //当天第一条记录
            purchaseOrderIdNew = time;
        }
        return type + purchaseOrderIdNew;
    }

    /**
     * 用于数据库中没有字段，生成第一条编号(类型为：6为日期+0001)
     * @param type B
     * 生成最新时间的编号
     */
    public static String getWorkSheetFirstId(String type) {
        Calendar nowTime = new GregorianCalendar();
        String time = (String.format("%02d", nowTime.get(Calendar.YEAR)) +
                String.format("%02d", nowTime.get(Calendar.MONTH) + 1)) + "0001";
        return type + time;
    }


    public static void main(String[] args) {
        System.out.println("当前编号" + getWorkSheetId("B", "2021070005"));
    }

}
